﻿using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HRP.Private.Vencimentos
{
    public partial class Vencimento : System.Web.UI.Page
    {
        private hrp_facturacao_geral _VencimentoMensalActual
        {
            get
            {
                if (ViewState["_VencimentoMensalActual"] != null)
                    return (hrp_facturacao_geral)ViewState["_VencimentoMensalActual"];

                return null;
            }
            set
            {
                ViewState["_VencimentoMensalActual"] = value;
            }
        }
        public hrp_facturacao_geral VencimentoMensalActual
        {
            get
            {
                return _VencimentoMensalActual;
            }
            set
            {
                _VencimentoMensalActual = value;
            }
        }

        private string _NomeUtilizadorGerouVencimentoMensal
        {
            get
            {
                if (ViewState["_NomeUtilizadorGerouVencimentoMensal"] != null)
                    return ViewState["_NomeUtilizadorGerouVencimentoMensal"].ToString();
                return string.Empty;
            }
            set
            {
                ViewState["_NomeUtilizadorGerouVencimentoMensal"] = value;
            }
        }



        public string NomeUtilizadorGerouVencimentoMensal
        {
            get
            {
                return _NomeUtilizadorGerouVencimentoMensal;
            }
            set
            {
                _NomeUtilizadorGerouVencimentoMensal = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (ObterVencimentoMensalID() > 0 && Session["EmpresaActual"] != null)
            {
                if (!Page.IsPostBack)
                {
                    int empresaId = ((hrp_empresas)Session["EmpresaActual"]).id;
                    VencimentoMensalActual = Facturacao_BLL.Instance.ObterFacturaGeral(ObterVencimentoMensalID(), empresaId);
                    var user = Cliente_BLL.Instance.ObterUserporID(VencimentoMensalActual.user_id);
                    NomeUtilizadorGerouVencimentoMensal = user!=null ? user.Name : "-";
                    grelhaRecibos.DataSource = Facturacao_BLL.Instance.ListaFacturacaoDetalhada(ObterVencimentoMensalID()).OrderBy(f => f.nome_func).ToList();
                    grelhaRecibos.DataBind();
                }
                relatorioIRT.Click += new EventHandler(relatorioIRT_Click);
                relatorioSS.Click += new EventHandler(relatorioSS_Click);
                imprimirBut.Click += new EventHandler(imprimirBut_Click);
                cancelarBut.Click += new EventHandler(cancelarBut_Click);
                relatorioGeralBut.Click += relatorioGeralBut_Click;
                grelhaRecibos.RowCommand += new GridViewCommandEventHandler(grelhaRecibos_RowCommand);
                msgPanel.Visible = false;
                errorPanel.Visible = false;
                vencimentoDetalhe.Visible = true;
            }
            else
            {
                msgPanel.Visible = false;
                errorPanel.Visible = true;
                vencimentoDetalhe.Visible = false;
            }
        }

        private int ObterVencimentoMensalID()
        {
            int vencMensalId = 0;
            if (Request.QueryString["id"] != null)
            {
                Int32.TryParse(Request.QueryString["id"], out vencMensalId);
            }
            if (vencMensalId == 0 && Request.UrlReferrer != null && !string.IsNullOrEmpty(Request.UrlReferrer.Query)
                && Request.UrlReferrer.Query.IndexOf("vencId=") > 0)
            {
                Int32.TryParse(Request.UrlReferrer.Query.Substring(Request.UrlReferrer.Query.IndexOf("vencId=") + 7), out vencMensalId);
                Response.Redirect(Page.ResolveUrl("~/Private/Vencimentos/Vencimento.aspx?id=" + vencMensalId));
            }
            return vencMensalId;
        }

        void relatorioSS_Click(object sender, EventArgs e)
        {
            Imprimir(Page.ResolveUrl("~/Private/Impressoes/SS.aspx?id="));
        }

        void relatorioIRT_Click(object sender, EventArgs e)
        {
            Imprimir(Page.ResolveUrl("~/Private/Impressoes/IRT.aspx?id="));
        }

        void relatorioGeralBut_Click(object sender, EventArgs e)
        {
            Imprimir(Page.ResolveUrl("~/Private/Impressoes/Resumo.aspx?id="));
        }

        private string ObterFuncSelecionados()
        {
            string result = string.Empty;
            foreach (GridViewRow row in grelhaRecibos.Rows)
            {
                CheckBox gerarSalarios = row.FindControl("selectFuncCB") as CheckBox;
                if (gerarSalarios.Checked)
                {
                    int idfuncionario = Convert.ToInt32(row.Cells[1].Text.ToString());
                    result += idfuncionario + "_";
                }
            }
            result = result.Trim('_');
            if (!string.IsNullOrEmpty(result))
            {
                result = string.Format("&reciboId={0}", result);
            }
            return result;
        }

        private void Imprimir(string url)
        {
            if (ObterVencimentoMensalID() > 0)
            {
                HttpContext context = HttpContext.Current;
                Page page = (Page)context.Handler;
                string script;
                url += ObterVencimentoMensalID()+ObterFuncSelecionados();
                script = @"window.open(""{0}"", ""{1}"");";

                script = String.Format(script, url, "_blank");
                ScriptManager.RegisterStartupScript(page,
                    typeof(Page),
                    "Redirect",
                    script,
                    true);
            }
        }

        void grelhaRecibos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (ObterVencimentoMensalID() > 0 && Session["EmpresaActual"] != null)
            {
                if (e.CommandName == "idFunc")
                {
                    int funcId = Convert.ToInt32(e.CommandArgument.ToString());
                    int empresaId = ((hrp_empresas)Session["EmpresaActual"]).id;
                    var ActualVencimentoFuncionarioDetalhe = Facturacao_BLL.Instance.ObterFacturaFuncionarioDetalhe(funcId, ObterVencimentoMensalID(), empresaId);

                    if (ActualVencimentoFuncionarioDetalhe != null)
                        Response.Redirect(Page.ResolveUrl("~/Private/Vencimentos/Recibo.aspx?id=" + funcId + "&vencId=" + ObterVencimentoMensalID()));
                }
            }
        }

        void cancelarBut_Click(object sender, EventArgs e)
        {
            if (ObterVencimentoMensalID() > 0)
            {
                Facturacao_BLL.Instance.CancelarFacturaGeral(ObterVencimentoMensalID());
                msgPanel.Visible = true;
                errorPanel.Visible = false;
                vencimentoDetalhe.Visible = false;
            }
        }

        void imprimirBut_Click(object sender, EventArgs e)
        {
            Imprimir(Page.ResolveUrl("~/Private/Impressoes/Vencimento.aspx?id="));
        }
    }
}